
package Controlador;

/**
 *
 * @author Ddj Murillo
 */

import Modelo.CompraDetalles;
import Modelo.CompraDetallesModelo;
import Modelo.Producto;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class ControlCompraDetalles {
    LinkedList lista;
    CompraDetallesModelo mod= new CompraDetallesModelo();
    DefaultTableModel tablaModelo;
    private ControlProducto producto=new ControlProducto();

    public ControlCompraDetalles(){
        lista=new LinkedList();
        tablaModelo=new DefaultTableModel();
    }

     /** guarda los detalles de la factura
     * @param tabla
     * @param consecutivo pedido
     * @return
     */
  public void registrarDetallesTabla(JTable tabla,String consecutivofactura){
      tablaModelo=(DefaultTableModel) tabla.getModel();
      int row=0;
       	try
	{
            while(!tablaModelo.getValueAt(row,1).equals(""))
            {
              if((String)tablaModelo.getValueAt(row,1)!=null && (Double)tablaModelo.getValueAt(row,4)!=null){
                   CompraDetalles pd=new CompraDetalles(consecutivofactura,//consecutivo pedido
                                                        (Integer)tablaModelo.getValueAt(row,0),//item numero
                                                        (Double)tablaModelo.getValueAt(row,5));//cantidad facturada
                   mod.setNuevoDetallesCompra(pd);

                   String codigoProducto=(String)tablaModelo.getValueAt(row,1);//codigo del producto
                   Producto prod=producto.consultaProducto(codigoProducto);
                   double cantidad=(Double)tablaModelo.getValueAt(row,5);
                   //disminuyo la existencia del producto facturado.
                   producto.disminuirExistencia(prod,cantidad);
              }
               row++;
            }

	}catch(Exception er){
		JOptionPane.showMessageDialog(null, "Error al guardar la lista de Detalles en la base de datos, se presento " +
                        "\n un inconveniente al tratar de Buscar la informacion requerida " +
                        "\n por el sistema." +
                        "\n."+er.toString() , "Error en la Carga de Informacion...",JOptionPane.DEFAULT_OPTION);
	}
    }

    /**
   * Calcula subtotal,iva,total
   * @param jTable
   * @return vector con subtotal, iva y total
   */
    public Double[] getTotalesPLanilla(JTable tabla){

        tablaModelo=(DefaultTableModel) tabla.getModel();
        Object[][] matriz=null;
        Double[] dato=new Double[3];
        int x=tablaModelo.getRowCount();
        matriz=new Object[x][8];

        for(int y=0;y<8;y++)
            for(int i=0;i<x;i++){
                matriz[i][y]=tablaModelo.getValueAt(i,y);
            }

       dato[0] =0.0;
       dato[1] =0.0;
       dato[2] =0.0;

       for(int i=0;i<x;i++){
          if(matriz[i][1]!=null)
                if(matriz[i][4]!=null && matriz[i][7]!=null){
                       Double bruto=Double.parseDouble(matriz[i][5].toString());
                       Double iva=Double.parseDouble(matriz[i][6].toString());
                       Double neto=Double.parseDouble(matriz[i][7].toString());

                       dato[0]=dato[0]+bruto;
                       dato[1]=dato[1]+iva;
                       dato[2]=dato[2]+neto;
                }
        }

        return dato;
    }


     /**
   * Operaciones con la tabla de detalles
   * @param jTable
   * @return vector con subtotal, iva y total
   */
    public Double[] getTotales(JTable tabla) throws SQLException{

        tablaModelo=(DefaultTableModel) tabla.getModel();
        Object[][] matriz=null;
        Double[] dato=new Double[3];
        int x=tablaModelo.getRowCount();
        matriz=new Object[x][10];

        for(int y=0;y<10;y++)
            for(int i=0;i<x;i++){
                matriz[i][y]=tablaModelo.getValueAt(i,y);
            }

       dato[0] =0.0;
       dato[1] =0.0;
       dato[2] =0.0;

       for(int i=0;i<x;i++){
          if(matriz[i][1]!=null)
            if(producto.isExist(matriz[i][1].toString())){
                if(matriz[i][5]!=null && matriz[i][6]!=null){
                       Double cantFact=Double.parseDouble(matriz[i][5].toString());
                       Double valUnit=Double.parseDouble(matriz[i][6].toString());

                       Double bruto=cantFact * valUnit;
                       Double iva=(Double.parseDouble(matriz[i][8].toString())/100) * (cantFact * valUnit);
                       Double neto=iva + (cantFact * valUnit);

                       dato[0]=dato[0]+bruto;
                       dato[1]=dato[1]+iva;
                       dato[2]=dato[2]+neto;
                }
            }
        }

        return dato;
    }

    /** consulta los detalles del pedido
     * @param tabla
     * @param consecutivo pedido
     * @return
     */
     public JTable cargaDetallesTabla(JTable tabla,String consulta){
        int x=0;
        cleanTabla(tabla);
        tablaModelo=(DefaultTableModel) tabla.getModel();
	try
	{
            lista=mod.cargaDetallesTabla(consulta);
            Iterator it=lista.iterator();
            while( it.hasNext() )
            {
                it.next();

                Producto prod =new Producto();
                Object vector[]=new Object[]{lista.get(x)};
                Object vector2[]=new Object[5];
                vector2=(Object[])vector[0];
                prod=producto.consultaProducto(vector2[1]+"");
                Double cantFact=Double.parseDouble(vector2[3]+"");
                Double valUnit=Double.parseDouble(vector2[4]+"");
                Double iva=(Double.parseDouble(prod.getIva()+"")/100) * (cantFact * valUnit);
                Double bruto=iva + (cantFact * valUnit);

                tablaModelo.addRow
                (
                    new Object[]
                    {
                      Double.parseDouble(vector2[0]+""),//item 0
                      vector2[1],//codigo 1
                      prod.getDescripcion(),//descripcion 2
                      prod.getExistencia(),//existencia    3
                      Double.parseDouble(vector2[2]+""),//cantidad solicitada 4
                      Double.parseDouble(vector2[3]+""),//cantidad facturada 5
                      Double.parseDouble(vector2[4]+""),//valor venta 6
                      cantFact * valUnit,//valor bruto
                      prod.getIva(),//iva
                      bruto//neto
                   }
                );
                x++;
             }
      //      tabla=matrizDetalles(tabla);//le doy los demas valores de los campos siguientes
	}catch(Exception er){
		JOptionPane.showMessageDialog(null, "Error al cargar la lista de Cliente de la base de datos, se presento " +
                        "\n un inconveniente al tratar de Buscar la informacion requerida " +
                        "\n por el sistema." +
                        "\n."+er.toString() , "Error en la Carga de Informacion...",JOptionPane.DEFAULT_OPTION);
	}

        tablaModelo.addRow(new Object[]{});

        return tabla;
    }


     /**
   * limpia la tabla
   * @param tabla
   * @return
   */
  public JTable cleanTabla(JTable tabla){
        tablaModelo=(DefaultTableModel) tabla.getModel();
        int x=tablaModelo.getRowCount();
	for(int i=-1;i<(x-1);i++)
		tablaModelo.removeRow(0);

    //    tablaModelo.addRow(new Object[]{});
        return tabla;
  }

}
